李守中

Debian 系相关

Table of Contents

1. 安装相关的问题

1.1. 安装时找不到一些硬件的驱动

官网下载的 ISO 映像里不带 nonfree 的固件。直接把这个 ISO 写到 U 盘进行安装,可能会导致安装过程中报找不到网卡、阵列卡等硬件的驱动的错误。

写入硬盘镜像到 U 盘之后。去官网下载 nonfree 固件的压缩包,名字类似这样的 debian_9_stretch_20200209_firmware.tar.gz 。官网下载下来的名字是 firmware.tar.gz

把里面的文件解压到 U 盘的 firmware 文件夹下。之后按照正常步骤安装。

sudo apt install -y apt-transport-https 装好包以后就能支持 https 传输协议了。

1.2. 系统日志报无法加载模块

DMS 模块无法加载:

Jan 30 22:55:46 j4105 kernel: i915 0000:00:02.0: firmware: failed to load i915/glk_dmc_ver1_04.bin (-2)
Jan 30 22:55:46 j4105 kernel: firmware_class: See https://wiki.debian.org/Firmware for information about missing firmware
Jan 30 22:55:46 j4105 kernel: i915 0000:00:02.0: Direct firmware load for i915/glk_dmc_ver1_04.bin failed with error -2
Jan 30 22:55:46 j4105 kernel: i915 0000:00:02.0: [drm] Failed to load DMC firmware i915/glk_dmc_ver1_04.bin. Disabling runtime power management.
Jan 30 22:55:46 j4105 kernel: i915 0000:00:02.0: [drm] DMC firmware homepage: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915

搜索 Debian 软件包的内容,可以找到 glk_dmc_ver1_04 这个文件在 firmware-misc-nonfree 包中。

apt install firmware-misc-nonfree 可以解决问题。

1.3. 系统日志报无法加载驱动

比较常见的是螃蟹网卡没有驱动的问题。

$ dmesg | grep firmware
[ 178.948233] r8169 0000:03:00.0: firmware: failed to load rtl_nic/rtl8168e-3.fw (-2)
[ 178.948252] r8169 0000:03:00.0: Direct firmware load for rtl_nic/rtl8168e-3.fw failed with error -2
[ 178.948257] r8169 0000:03:00.0 enp3s0: unable to load firmware patch rtl_nic/rtl8168e-3.fw (-2)

non-free 源中的 firmware-realtek 包里包含了多数螃蟹网卡的驱动,使用 apt search firmware-realtek 查看包的详细信息, Description 部分描述了包内都有哪些驱动。

如果这个包内包含的驱动和网卡型号符合, apt install firmware-realtek 安装后重启系统,网卡驱动就能正常加载了。

1.4. 系统日志报需要升级 microcode

[Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0xb2 (or later)

出现这个问题时,升级 BIOS 才是比较靠谱的做法。但在无法更新 BIOS 的时候,使用 apt install intel-microcode ( contrib 和 non-free 软件源内的包 ) 也可以更新 microcode,但重装系统之后 microcode 又回到了旧版。

2. 包管理问题

2.1. 本地软件源

安装系统用的 ISO 文件可作为本地软件源,在断网情况下提供部分软件的安装包。

执行 sudo mount -o loop </path/to/debian.iso> </path/to/mount_point> 挂载 ISO 文件。

执行 sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak 备份源列表。

然后 sudo vim /etc/apt/sources.list 加入如下内容:

deb [trusted=yes] file://</path/to/mount_point> <system_name>

apt 本地源配置完成。

2.2. 网络软件源

先给个例子,清华大学的 Debian Buster 软件源会有如下内容:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free

源码镜像一般不用,注释了也没有问题。

在使用网络软件源升级系统后,系统内部可能会留下一些不再有用的链接。

sudo symlinks -r /usr | grep dangling 查找 /usr 目录下不再有用的链接。

sudo symlinks -r -d /usr 删除 /usr 目录下不再有用的链接。

2.2.1. backports 软件

注意第 6 7 两行:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free

它表示使用 backports 源,即 反向移植 的内容。

据 Debian 官方说法,这个 backports 里的包多数来自于 Debian 的 testing 版本。少数来自于 unstable 版本。

这些软件包经过调整和重新编译后可以在 Debian 稳定版中使用,但依旧存在与其他属于 stable 版本的软件发生冲突的可能。

谨慎使用这个源吧。

2.2.2. proposed-updates 软件

官方源也有一类软件放在 <version_name>-proposed-updates 下。

Debian 大版本 release 后还有小版本的更新,比如 10.1, 10.2, 10.3 等,这些 release 被称为 point release

这个 proposed-updates 的目的是为下一次的 point release 做准备工作。

也就是说,软件包下一次 point release 要发布的更新先放在 proposed-updates 中,积累到一定的量之后正式发布 point release。

使用 proposed-updates 软件源可以提前更新下个小版本的软件,也就只对软件更新的早晚产生影响。

所以,这个源可用可不用。

2.3. dpkg

2.3.1. 查看安装状态

dpkg -l | grep '<package_name>' 查看软件安装状态。

这时一般会出现有两个 ( 或者三个 ) 字母组成的 flag:

  1. 第一个字母: 所需的状态 desired package state ( selection state )
    • u 未知 unknown
    • i 安装 install
    • r 删除/卸载 remove / deinstall
    • p 清除 ( 也删除配置文件 ) purge ( remove including config files )
    • h 保持 hold
  2. 第二个字母: 当前包状态 current package state
    • n 未安装 not-installed
    • i 已安装 installed
    • c 仅安装配置文件 config-file` ( only the config files are installed )
    • U 解包 unpacked
    • F 由于某种原因配置失败 half-configured ( configuration failed for some reason )
    • h 由于某种原因安装失败 half-installed ( installation failed for some reason )
    • W 等待来自另一个包的触发器 triggers-awaited ( package is waiting for a trigger from another package )
    • t 已被触发 triggers-pending ( package has been triggered )
  3. 第三个字母通常情况下是一个空格,看不到: 错误状态 error state
    • R 包破损,需要重新安装 reinst-required ( package broken, reinstallation required )

2.3.2. 安装与卸载

执行 sudo dpkg -i <package-file-name>.deb 完成安装。这里的 -i 表示 install。

执行 sudo dpkg -r <package-file-name> 移除软件包。

执行 dpkg -l | grep '<package-file-name>' 查看包安装状态。 rc 表示软件包已经删除 R emove,但配置文件 C onfig-file 还在。

执行 sudo dpkg -P <package-file-name> 彻底删除软件包。包括配置文件。

执行 sudo dpkg -l | grep "^rc" | awk '{print $2}' | xargs sudo dpkg -P 删除所有 rc 包的残余配置文件。

2.4. 显示最近安装的软件包

Linux 系统保存了所有发生事件的日志。可以参考最近安装软件包的日志。

  • apt 命令的日志
    • grep " install " /var/log/apt/history.log 仅显示用 apt 命令安装的的程序,不会显示被依赖安装的软件包。
  • dpkg 命令的日志
    • grep " install " /var/log/dpkg.log 显示所有的软件安装包,包括最近安装的过程中所依赖的软件包。

2.5. 缓存清理

2.5.1. 清理 apt 缓存文件

Debian 系系统在 /var/cache/apt/archives 中保留 deb 包的缓存文件。

sudo du -sh /var/cache/apt 查看当前缓存文件的空间占用情况。

sudo apt-get autoclean 清理过时的软件包。

sudo apt-get clean 移除所有 apt 缓存中的软件包。

上两条命令清理得不是非常干净,会残留 kb 级的缓存,但不过如果很久没清理的话,效果很好。

2.5.2. 删除不被依赖的包

sudo apt-get autoremove 移除系统不再需要的依赖库和软件包。

被删除的这些包是为了满足某个包的依赖关系,被自动安装的,此时已不再需要。这条命令也会删除系统中的 linux 旧内核 ( 有更精确的操作方法,但是操作比较麻烦,这里略过 )。

命令执行后,配置文件依旧在相应位置。

sudo apt-get autoremove --purge 可以同时清除软件包和软件的配置文件。

2.5.3. 清除残余配置文件

dpkg --list | grep "^rc" 查看残余的配置文件。结果是这样的:

mgz@albb:~$ dpkg --list | grep "^rc"
rc  linux-image-4.19.0-10-amd64    4.19.132-1                   amd64        Linux 4.19 for 64-bit PCs (signed)
rc  linux-image-4.19.0-9-amd64     4.19.118-2+deb10u1           amd64        Linux 4.19 for 64-bit PCs (signed)
rc  ntp                            1:4.2.8p12+dfsg-4            amd64        Network Time Protocol daemon and utility programs

rc 表示软件包已经删除 R emove,但配置文件 C onfig-file 还在。

执行 sudo dpkg -l | grep "^rc" | awk '{print $2}' | xargs sudo dpkg -P 删除所有 rc 包的残余配置文件。



Last Update: 2023-11-29 Wed 11:30

Generated by: Emacs 28.2 (Org mode 9.5.5)   Contact: [email protected]

若正文中无特殊说明,本站内容遵循: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议